package com.common.web.dataset.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 数据列定义，List集合数据转表格数据
 * @author lj
 * @date 2016年12月13日10:24:25
 */

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DataField {
	
	/**
	 * 定义表头显示的文字
	 * 
	 * @return
	 */
	String text() default "";

	/**
	 * 定义此列的宽度。default="auto" 可以有以下几种取值形式：
	 * <p>
	 * <b>80 | '80px' | '80%' | 'auto'(默认)</b>
	 * </p>
	 * 
	 * @return
	 */
	String width() default "auto";

	/**
	 * 定义此列在数据表格中显示在为水平可滚动的区域，在此列之前的没有定义flex=true的列则固定在左侧，
	 * 在此列之后的没有定义flex=true的列会固定在右侧。必须为连续的多列的flex属性定义为true。
	 * 在DOM中可以为th标签增加CLASScol-flex实现，等同于flex=true。
	 * 
	 * @return
	 */
	boolean flex() default false;

	/**
	 * 数据类型，默认会根据字段类型进行取值
	 * 
	 * @return
	 */
	String type() default "";

	/**
	 * 是否启用排序，default=false
	 * 
	 * @return
	 */
	boolean sort() default false;

	/**
	 * 是否忽略该列，default = false
	 * 
	 * @return
	 */
	boolean ignore() default false;

	/**
	 * 列的表头样式
	 * 
	 * @return
	 */
	String cssClass() default "";

	/**
	 * 列的数据部分样式，该值可以自定义
	 * <p>不过也有几个可取值可供选择： </p>
	 * <b>DataCSS.TABLE_HEADER_LEFT：左对齐（默认），</b></br>
	 * <b>DataCSS.TABLE_HEADER_CENTER：居中，</b></br>
	 * <b>DataCSS.TABLE_HEADER_RIGHT：table-header-right：右对齐</b>
	 * @return
	 */
	String dataCssClass() default DataCSS.TABLE_HEADER_LEFT;

	/**
	 * 日期类型的格式定义，遇到日期类型时定义有效
	 * 
	 * @return
	 */
	String dateFormat() default "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 执行该对象的某个属性的值作为传递到前端的值，当@DataField注解加在自定义的java bean上时，才需要设置该属性
	 * @return
	 */
	String fieldOfFiledName() default "";
	/**
	 * 执行该对象的某个方法的返回值作为传递到前端的值，当@DataField注解加在自定义的java bean上时，才需要设置该属性
	 * @return
	 */
	String fieldOfMethodName() default "";
	
	/**
	 * 执行当前对象的某个方法来获取一个值传递到前端，该属性适合于处理集合对象
	 * @return
	 */
	String invokeMethodName() default "";

	ExtraDataField[] others() default {};
}
